import axios, { AxiosHeaders } from 'axios'

import { Dialog } from 'vant'
import type { AxiosRequestConfig } from 'axios'

// 创建axios实例
const instance = axios.create({
    baseURL: 'http://47.94.148.165:3001/api',
    timeout: 10000
})

// 制作一个自己的请求头格式
interface myAxiosRequestConfig extends AxiosRequestConfig {
    headers: { token?: string | null }
}



// 配置请求拦截器
instance.interceptors.request.use((config: AxiosRequestConfig) => {
    // 所有的请求都要经过我
    // console.log(config.url);

    // 判断是获取用户信息
    if (config.url === '/user/info') {
        // (config.headers as AxiosRequestConfig<AxiosHeaders>).token = window.localStorage.getItem('token')
        // (config as myAxiosRequestConfig).headers.token = window.localStorage.getItem('token')
        (config as myAxiosRequestConfig).headers.token = window.localStorage.getItem('token')

    }
    // 判断是购物车相关

    // 判断是 订单相关
    // 所有的购物车相关接口都是 /cart/xxxx
    // 只要判断是以 /cart 开头的,就可以
    // 每一个购物车相关的接口都要判断 token 是否真实有效
    // 可以在响应拦截器内做判断
    if (/^\/cart/.test(config.url as string)) {
        // 拿到token进行添加
        // (config.headers as AxiosRequestConfig<AxiosHeaders>).token = window.localStorage.getItem('token')
        (config as myAxiosRequestConfig).headers.token = window.localStorage.getItem('token')
    }

    // 查询所有订单
    if (config.url === '/user/orderlist') {
        (config as myAxiosRequestConfig).headers.token = window.localStorage.getItem('token')

    }
    
    // 判断是订单相关
    return config
})

// 配置响应拦截器
instance.interceptors.response.use(
    response => {

        // 判断如果返回的内容的 code 为 '10119'
        // 那么就表示无效 token
        // 做出提示
        if (response.data.code === '10119') {
            Dialog({
                title: '提示',
                message: '您登录状态有问题, 请重新登录'
            })

            return { code: 0 }
        }

        return response.data
    },
    err => {
        Dialog.alert({ title: '网络错误', message: '网络不给力, 稍后再来' })
    }
)
// 导出实例
export default instance